{
  "openapi": "3.0.0",
  "info": {
    "title": "Configuration state for the Mixer client library.",
    "version": "client"
  },
  "components": {
    "schemas": {
      "istio.mixer.v1.config.client.HTTPAPISpec": {
        "description": "HTTPAPISpec defines the canonical configuration for generating API-related attributes from HTTP requests based on the method and uri templated path matches. It is sufficient for defining the API surface of a service for the purposes of API attribute generation. It is not intended to represent auth, quota, documentation, or other information commonly found in other API specifications, e.g. OpenAPI.",
        "type": "object",
        "properties": {
          "attributes": {
            "$ref": "#/components/schemas/istio.mixer.v1.Attributes"
          },
          "patterns": {
            "description": "List of HTTP patterns to match.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.HTTPAPISpecPattern"
            }
          },
          "apiKeys": {
            "description": "List of APIKey that describes how to extract an API-KEY from an HTTP request. The first API-Key match found in the list is used, i.e. 'OR' semantics.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.APIKey"
            }
          }
        }
      },
      "istio.mixer.v1.config.client.HTTPAPISpecPattern": {
        "description": "HTTPAPISpecPattern defines a single pattern to match against incoming HTTP requests. The per-pattern list of attributes is generated if both the http_method and uri_template match. In addition, the top-level list of attributes in the HTTPAPISpec is also generated.",
        "type": "object",
        "oneOf": [
          {
            "required": [
              "uriTemplate"
            ],
            "properties": {
              "attributes": {
                "$ref": "#/components/schemas/istio.mixer.v1.Attributes"
              },
              "httpMethod": {
                "description": "HTTP request method to match against as defined by [rfc7231](https://tools.ietf.org/html/rfc7231#page-21). For example: GET, HEAD, POST, PUT, DELETE.",
                "type": "string",
                "format": "string"
              },
              "uriTemplate": {
                "description": "URI template to match against as defined by [rfc6570](https://tools.ietf.org/html/rfc6570). For example, the following are valid URI templates: /pets /pets/{id} /dictionary/{term:1}/{term} /search{?q*,lang}",
                "type": "string",
                "format": "string"
              }
            }
          },
          {
            "required": [
              "regex"
            ],
            "properties": {
              "attributes": {
                "$ref": "#/components/schemas/istio.mixer.v1.Attributes"
              },
              "regex": {
                "description": "EXPERIMENTAL: ecmascript style regex-based match as defined by [EDCA-262](http://en.cppreference.com/w/cpp/regex/ecmascript). For example,",
                "type": "string",
                "format": "string"
              },
              "httpMethod": {
                "description": "HTTP request method to match against as defined by [rfc7231](https://tools.ietf.org/html/rfc7231#page-21). For example: GET, HEAD, POST, PUT, DELETE.",
                "type": "string",
                "format": "string"
              }
            }
          }
        ]
      },
      "istio.mixer.v1.config.client.APIKey": {
        "description": "APIKey defines the explicit configuration for generating the `request.api_key` attribute from HTTP requests.",
        "type": "object",
        "oneOf": [
          {
            "required": [
              "query"
            ],
            "properties": {
              "query": {
                "description": "API Key is sent as a query parameter. `query` represents the query string parameter name.",
                "type": "string",
                "format": "string"
              }
            }
          },
          {
            "required": [
              "header"
            ],
            "properties": {
              "header": {
                "description": "API key is sent in a request header. `header` represents the header name.",
                "type": "string",
                "format": "string"
              }
            }
          },
          {
            "required": [
              "cookie"
            ],
            "properties": {
              "cookie": {
                "description": "API key is sent in a [cookie](https://swagger.io/docs/specification/authentication/cookie-authentication),",
                "type": "string",
                "format": "string"
              }
            }
          }
        ]
      },
      "istio.mixer.v1.config.client.HTTPAPISpecReference": {
        "description": "HTTPAPISpecReference defines a reference to an HTTPAPISpec. This is typically used for establishing bindings between an HTTPAPISpec and an IstioService. For example, the following defines an HTTPAPISpecReference for service `foo` in namespace `bar`.",
        "type": "object",
        "properties": {
          "name": {
            "description": "The short name of the HTTPAPISpec. This is the resource name defined by the metadata name field.",
            "type": "string",
            "format": "string"
          },
          "namespace": {
            "description": "Optional namespace of the HTTPAPISpec. Defaults to the encompassing HTTPAPISpecBinding's metadata namespace field.",
            "type": "string",
            "format": "string"
          }
        }
      },
      "istio.mixer.v1.config.client.HTTPAPISpecBinding": {
        "description": "HTTPAPISpecBinding defines the binding between HTTPAPISpecs and one or more IstioService. For example, the following establishes a binding between the HTTPAPISpec `petstore` and service `foo` in namespace `bar`.",
        "type": "object",
        "properties": {
          "services": {
            "description": "One or more services to map the listed HTTPAPISpec onto.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.IstioService"
            }
          },
          "apiSpecs": {
            "description": "One or more HTTPAPISpec references that should be mapped to the specified service(s). The aggregate collection of match conditions defined in the HTTPAPISpecs should not overlap.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.HTTPAPISpecReference"
            }
          }
        }
      },
      "istio.mixer.v1.config.client.IstioService": {
        "description": "IstioService identifies a service and optionally service version. The FQDN of the service is composed from the name, namespace, and implementation-specific domain suffix (e.g. on Kubernetes, \"reviews\" + \"default\" + \"svc.cluster.local\" -\u003e \"reviews.default.svc.cluster.local\").",
        "type": "object",
        "properties": {
          "name": {
            "description": "The short name of the service such as \"foo\".",
            "type": "string",
            "format": "string"
          },
          "namespace": {
            "description": "Optional namespace of the service. Defaults to value of metadata namespace field.",
            "type": "string",
            "format": "string"
          },
          "domain": {
            "description": "Domain suffix used to construct the service FQDN in implementations that support such specification.",
            "type": "string",
            "format": "string"
          },
          "service": {
            "description": "The service FQDN.",
            "type": "string",
            "format": "string"
          },
          "labels": {
            "description": "Optional one or more labels that uniquely identify the service version.",
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "format": "string"
            }
          }
        }
      },
      "istio.mixer.v1.config.client.NetworkFailPolicy": {
        "description": "Specifies the behavior when the client is unable to connect to Mixer.",
        "type": "object",
        "properties": {
          "policy": {
            "$ref": "#/components/schemas/istio.mixer.v1.config.client.NetworkFailPolicy.FailPolicy"
          },
          "maxRetry": {
            "description": "Max retries on transport error.",
            "type": "integer"
          },
          "baseRetryWait": {
            "description": "Base time to wait between retries. Will be adjusted by exponential backoff and jitter.",
            "type": "string"
          },
          "maxRetryWait": {
            "description": "Max time to wait between retries.",
            "type": "string"
          }
        }
      },
      "istio.mixer.v1.config.client.NetworkFailPolicy.FailPolicy": {
        "description": "Describes the policy.",
        "type": "string",
        "enum": [
          "FAIL_OPEN",
          "FAIL_CLOSE"
        ]
      },
      "istio.mixer.v1.config.client.ServiceConfig": {
        "description": "Defines the per-service client configuration.",
        "type": "object",
        "properties": {
          "disableCheckCalls": {
            "description": "If true, do not call Mixer Check.",
            "type": "boolean"
          },
          "disableReportCalls": {
            "description": "If true, do not call Mixer Report.",
            "type": "boolean"
          },
          "mixerAttributes": {
            "$ref": "#/components/schemas/istio.mixer.v1.Attributes"
          },
          "httpApiSpec": {
            "description": "HTTP API specifications to generate API attributes.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.HTTPAPISpec"
            }
          },
          "quotaSpec": {
            "description": "Quota specifications to generate quota requirements.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.QuotaSpec"
            }
          },
          "networkFailPolicy": {
            "$ref": "#/components/schemas/istio.mixer.v1.config.client.NetworkFailPolicy"
          },
          "forwardAttributes": {
            "$ref": "#/components/schemas/istio.mixer.v1.Attributes"
          }
        }
      },
      "istio.mixer.v1.config.client.QuotaSpec": {
        "description": "Determines the quotas used for individual requests.",
        "type": "object",
        "properties": {
          "rules": {
            "description": "A list of Quota rules.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.QuotaRule"
            }
          }
        }
      },
      "istio.mixer.v1.config.client.TransportConfig": {
        "description": "Defines the transport config on how to call Mixer.",
        "type": "object",
        "properties": {
          "networkFailPolicy": {
            "$ref": "#/components/schemas/istio.mixer.v1.config.client.NetworkFailPolicy"
          },
          "disableCheckCache": {
            "description": "The flag to disable check cache.",
            "type": "boolean"
          },
          "disableQuotaCache": {
            "description": "The flag to disable quota cache.",
            "type": "boolean"
          },
          "disableReportBatch": {
            "description": "The flag to disable report batch.",
            "type": "boolean"
          },
          "statsUpdateInterval": {
            "description": "Specify refresh interval to write Mixer client statistics to Envoy share memory. If not specified, the interval is 10 seconds.",
            "type": "string"
          },
          "checkCluster": {
            "description": "Name of the cluster that will forward check calls to a pool of mixer servers. Defaults to \"mixer_server\". By using different names for checkCluster and reportCluster, it is possible to have one set of Mixer servers handle check calls, while another set of Mixer servers handle report calls.",
            "type": "string",
            "format": "string"
          },
          "reportCluster": {
            "description": "Name of the cluster that will forward report calls to a pool of mixer servers. Defaults to \"mixer_server\". By using different names for checkCluster and reportCluster, it is possible to have one set of Mixer servers handle check calls, while another set of Mixer servers handle report calls.",
            "type": "string",
            "format": "string"
          },
          "attributesForMixerProxy": {
            "$ref": "#/components/schemas/istio.mixer.v1.Attributes"
          },
          "reportBatchMaxEntries": {
            "description": "When disable_report_batch is false, this value specifies the maximum number of requests that are batched in report. If left unspecified, the default value of report_batch_max_entries == 0 will use the hardcoded defaults of istio::mixerclient::ReportOptions.",
            "type": "integer"
          },
          "reportBatchMaxTime": {
            "description": "When disable_report_batch is false, this value specifies the maximum elapsed time a batched report will be sent after a user request is processed. If left unspecified, the default report_batch_max_time == 0 will use the hardcoded defaults of istio::mixerclient::ReportOptions.",
            "type": "string"
          }
        }
      },
      "istio.mixer.v1.config.client.HttpClientConfig": {
        "description": "Defines the client config for HTTP.",
        "type": "object",
        "properties": {
          "mixerAttributes": {
            "$ref": "#/components/schemas/istio.mixer.v1.Attributes"
          },
          "forwardAttributes": {
            "$ref": "#/components/schemas/istio.mixer.v1.Attributes"
          },
          "transport": {
            "$ref": "#/components/schemas/istio.mixer.v1.config.client.TransportConfig"
          },
          "serviceConfigs": {
            "description": "Map of control configuration indexed by destination.service. This is used to support per-service configuration for cases where a mixerclient serves multiple services.",
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.ServiceConfig"
            }
          },
          "defaultDestinationService": {
            "description": "Default destination service name if none was specified in the client request.",
            "type": "string",
            "format": "string"
          },
          "ignoreForwardedAttributes": {
            "description": "Whether or not to use attributes forwarded in the request headers to create the attribute bag to send to mixer. For intra-mesh traffic, this should be set to \"false\". For ingress/egress gateways, this should be set to \"true\".",
            "type": "boolean"
          }
        }
      },
      "istio.mixer.v1.config.client.TcpClientConfig": {
        "description": "Defines the client config for TCP.",
        "type": "object",
        "properties": {
          "disableCheckCalls": {
            "description": "If set to true, disables Mixer check calls.",
            "type": "boolean"
          },
          "disableReportCalls": {
            "description": "If set to true, disables Mixer check calls.",
            "type": "boolean"
          },
          "mixerAttributes": {
            "$ref": "#/components/schemas/istio.mixer.v1.Attributes"
          },
          "transport": {
            "$ref": "#/components/schemas/istio.mixer.v1.config.client.TransportConfig"
          },
          "connectionQuotaSpec": {
            "$ref": "#/components/schemas/istio.mixer.v1.config.client.QuotaSpec"
          },
          "reportInterval": {
            "description": "Specify report interval to send periodical reports for long TCP connections. If not specified, the interval is 10 seconds. This interval should not be less than 1 second, otherwise it will be reset to 1 second.",
            "type": "string"
          }
        }
      },
      "istio.mixer.v1.config.client.QuotaRule": {
        "description": "Specifies a rule with list of matches and list of quotas. If any clause matched, the list of quotas will be used.",
        "type": "object",
        "properties": {
          "quotas": {
            "description": "The list of quotas to charge.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.Quota"
            }
          },
          "match": {
            "description": "If empty, match all request. If any of match is true, it is matched.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.AttributeMatch"
            }
          }
        }
      },
      "istio.mixer.v1.config.client.AttributeMatch": {
        "description": "Specifies a match clause to match Istio attributes",
        "type": "object",
        "properties": {
          "clause": {
            "description": "Map of attribute names to StringMatch type. Each map element specifies one condition to match.",
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.StringMatch"
            }
          }
        }
      },
      "istio.mixer.v1.config.client.Quota": {
        "description": "Specifies a quota to use with quota name and amount.",
        "type": "object",
        "properties": {
          "quota": {
            "description": "The quota name to charge",
            "type": "string",
            "format": "string"
          },
          "charge": {
            "description": "The quota amount to charge",
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "istio.mixer.v1.config.client.StringMatch": {
        "description": "Describes how to match a given string in HTTP headers. Match is case-sensitive.",
        "type": "object",
        "oneOf": [
          {
            "required": [
              "exact"
            ],
            "properties": {
              "exact": {
                "description": "exact string match",
                "type": "string",
                "format": "string"
              }
            }
          },
          {
            "required": [
              "prefix"
            ],
            "properties": {
              "prefix": {
                "description": "prefix-based match",
                "type": "string",
                "format": "string"
              }
            }
          },
          {
            "required": [
              "regex"
            ],
            "properties": {
              "regex": {
                "description": "ECMAscript style regex-based match",
                "type": "string",
                "format": "string"
              }
            }
          }
        ]
      },
      "istio.mixer.v1.config.client.QuotaSpecBinding": {
        "description": "QuotaSpecBinding defines the binding between QuotaSpecs and one or more IstioService.",
        "type": "object",
        "properties": {
          "services": {
            "description": "One or more services to map the listed QuotaSpec onto.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.IstioService"
            }
          },
          "quotaSpecs": {
            "description": "One or more QuotaSpec references that should be mapped to the specified service(s). The aggregate collection of match conditions defined in the QuotaSpecs should not overlap.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/istio.mixer.v1.config.client.QuotaSpecBinding.QuotaSpecReference"
            }
          }
        }
      },
      "istio.mixer.v1.config.client.QuotaSpecBinding.QuotaSpecReference": {
        "description": "QuotaSpecReference uniquely identifies the QuotaSpec used in the Binding.",
        "type": "object",
        "properties": {
          "name": {
            "description": "The short name of the QuotaSpec. This is the resource name defined by the metadata name field.",
            "type": "string",
            "format": "string"
          },
          "namespace": {
            "description": "Optional namespace of the QuotaSpec. Defaults to the value of the metadata namespace field.",
            "type": "string",
            "format": "string"
          }
        }
      },
      "istio.mixer.v1.Attributes": {
        "description": "Default attributes to send to Mixer in both Check and Report. This typically includes \"destination.ip\" and \"destination.uid\" attributes.",
        "type": "object",
        "properties": {
          "attributes": {
            "description": "A map of attribute name to its value.",
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/istio.mixer.v1.Attributes.AttributeValue"
            }
          }
        }
      },
      "istio.mixer.v1.Attributes.AttributeValue": {
        "type": "object",
        "oneOf": [
          {
            "required": [
              "stringValue"
            ],
            "properties": {
              "stringValue": {
                "description": "Used for values of type STRING, DNS_NAME, EMAIL_ADDRESS, and URI",
                "type": "string",
                "format": "string"
              }
            }
          },
          {
            "required": [
              "int64Value"
            ],
            "properties": {
              "int64Value": {
                "description": "Used for values of type INT64",
                "type": "integer",
                "format": "int64"
              }
            }
          },
          {
            "required": [
              "doubleValue"
            ],
            "properties": {
              "doubleValue": {
                "description": "Used for values of type DOUBLE",
                "type": "number",
                "format": "double"
              }
            }
          },
          {
            "required": [
              "boolValue"
            ],
            "properties": {
              "boolValue": {
                "description": "Used for values of type BOOL",
                "type": "boolean"
              }
            }
          },
          {
            "required": [
              "bytesValue"
            ],
            "properties": {
              "bytesValue": {
                "description": "Used for values of type BYTES",
                "type": "string",
                "format": "binary"
              }
            }
          },
          {
            "required": [
              "timestampValue"
            ],
            "properties": {
              "timestampValue": {
                "description": "Used for values of type TIMESTAMP",
                "type": "string",
                "format": "dateTime"
              }
            }
          },
          {
            "required": [
              "durationValue"
            ],
            "properties": {
              "durationValue": {
                "description": "Used for values of type DURATION",
                "type": "string"
              }
            }
          },
          {
            "required": [
              "stringMapValue"
            ],
            "properties": {
              "stringMapValue": {
                "$ref": "#/components/schemas/istio.mixer.v1.Attributes.StringMap"
              }
            }
          }
        ]
      },
      "istio.mixer.v1.Attributes.StringMap": {
        "description": "Used for values of type STRING_MAP",
        "type": "object",
        "properties": {
          "entries": {
            "description": "Holds a set of name/value pairs.",
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "format": "string"
            }
          }
        }
      }
    }
  }
}